/*
 * =====================================================================================
 *
 *       Filename:  mathutils.h
 *
 *    Description:  Math Utils
 *
 *        Version:  1.0
 *        Created:  2009年06月15日 14时49分10秒
 *       Revision:  none
 *       Compiler:  gcc
 *
 *         Author:  Ying Wang (WY), ywang@nlpr.ia.ac.cn
 *        Company:  Institute of Automation, Chinese Academy of Sciences
 *
 * =====================================================================================
 */
#ifndef MATHUTILS_H
#define MATHUTILS_H
#include <cmath>
#include <cstdlib>
#include <cassert>
#define PI 3.141592653589793

/**
 * \brief squared euclidean distance
 */
template<class T>
inline T SQE( const T &a)
{
	return a*a;
}	

template<class T>
inline T SIGN(const T &a, const T &b)
{
    return b >=0 ? (a>=0 ? a:-a) : (a>=0 ? -a :a);
}
inline float SIGN(const float &a,const float &b)
{
    return b>=0 ? (a>=0 ? a:-a) : (a>=0 ? -a:a);
}
inline double SIGN(const double &a, const double &b)
{
    return b>=0 ? (a>=0 ? a:-a) : (a>=0 ? -a:a);
}
inline int randint(int low, int up)
{
	return (rand()%up + low);
}

template<typename T>
inline T sigmoid(const T &a)
{
	return 1/(1+exp(-a));
}

#endif

